#ifndef __MQ_CONSUME_HPP__
#define __MQ_CONSUME_HPP__

// #include "mq_exchange.hpp"
// #include "mq_queue.hpp"
#include <iostream>
#include <string>
#include <unordered_map>
#include "../mqcommon/mq_helper.hpp"
#include "../mqcommon/mq_msg.pb.h"
#include "../mqcommon/mq_proto.pb.h"
#include <cassert>
#include <memory>
#include <mutex>
#include <functional>

namespace mq
{
    using ConsumerCallback = std::function<void(const std::string&,const BasicProperties* ,const std::string&)>;
    struct Consumer
    {
        using Ptr = std::shared_ptr<Consumer>;
        std::string tag; // 消费者标识。
        std::string qname; // 消费者订阅的队列名称。
        bool auto_ack; // 自动确认标志。
        ConsumerCallback callback;

        // 无参构造，方便指针构造对象。
        Consumer() { DLOG("无参构造出Consumer"); }
        ~Consumer() { DLOG("Consumer析构"); }
        Consumer(const std::string& ctag,const std::string& queue_name,bool ack_flag,const ConsumerCallback& cb)
            :tag(ctag),qname(queue_name),auto_ack(ack_flag),callback(std::move(cb))        
        {
            DLOG("带参构造出Consumer");
        }
    };
}

#endif 